home *** CD-ROM | disk | FTP | other *** search
/ Reverse Code Engineering RCE CD +sandman 2000 / ReverseCodeEngineeringRceCdsandman2000.iso / RCE / Ebooks / Thinking in C++ V2 / C17 / HTMLStripper.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2000-05-25  |  1.2 KB  |  50 lines

  1. //: C17:HTMLStripper.cpp
  2. // From Thinking in C++, 2nd Edition
  3. // Available at http://www.BruceEckel.com
  4. // (c) Bruce Eckel 1999
  5. // Copyright notice in Copyright.txt
  6. // Filter to remove html tags and markers
  7. #include "../require.h"
  8. #include <fstream>
  9. #include <iostream>
  10. #include <string>
  11. using namespace std;
  12.  
  13. string replaceAll(string s, string f, string r) {
  14.   unsigned int found = s.find(f);
  15.   while(found != string::npos) {
  16.     s.replace(found, f.length(), r);
  17.     found = s.find(f);
  18.   }
  19.   return s;
  20. }
  21.  
  22. string stripHTMLTags(string s) {
  23.   while(true) {
  24.     unsigned int left = s.find('<');
  25.     unsigned int right = s.find('>');
  26.     if(left==string::npos || right==string::npos)
  27.       break;
  28.     s = s.erase(left, right - left + 1);
  29.   }
  30.   s = replaceAll(s, "<", "<");
  31.   s = replaceAll(s, ">", ">");
  32.   s = replaceAll(s, "&", "&");
  33.   s = replaceAll(s, " ", " ");
  34.   // Etc...
  35.   return s;
  36. }
  37.  
  38. int main(int argc, char* argv[]) {
  39.   requireArgs(argc, 1, 
  40.     "usage: HTMLStripper InputFile");
  41.   ifstream in(argv[1]);
  42.   assure(in, argv[1]);
  43.   const int sz = 4096;
  44.   char buf[sz];
  45.   while(in.getline(buf, sz)) {
  46.     string s(buf);
  47.     cout << stripHTMLTags(s) << endl;
  48.   }
  49. } ///:~
  50.